package com.itfreer.file.service;

import java.util.List;

import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.itfreer.utils.json.JsonUtils;

/**
 * 定义基于dubbo的IBucketManage服务
 */
@Component
@Path("/file/bucketManageService")
public class BucketManageService {

	@Autowired
	private IBucketManageService bucketManage;
	
	/**
	 * 创建文件存储块
	 * @param bucketName
	 */
	@POST
    @Path("/createBucket")
	public void createBucket(@QueryParam("bucketName") String bucketName){
		bucketManage.createBucket(bucketName);
	}
	
	/**
	 * 列举Bucket
	 * @param prefix  限定返回的bucket name必须以prefix作为前缀，可以不设定，不设定时不过滤前缀信息
	 * @param marker  设定结果从marker之后按字母排序的第一个开始返回，可以不设定，不设定时从头开始返回
	 * @param maxKeys 限定此次返回bucket的最大数，如果不设定，默认为100，max-keys取值不能大于1000
	 * @return
	 */
	@GET
    @Path("/listBuckets")
	@Produces(MediaType.TEXT_PLAIN)
	public String listBuckets(@QueryParam("prefix") String prefix, 
			@QueryParam("marker") String marker, 
			@QueryParam("maxKeys") Integer maxKeys){
		List<String> result = bucketManage.listBuckets(prefix, marker, maxKeys);
		return JsonUtils.toJSONString(result);
	}
	
	/**
	 * 删除文件存储块
	 * @param bucketName
	 */
	@DELETE
    @Path("/deleteBucket/{bucketName}")
	public void deleteBucket(@PathParam("bucketName") String bucketName){
		bucketManage.deleteBucket(bucketName);
	}
	
	/**
	 * 文件存储块是否存在
	 * @param bucketName
	 */
	@GET
    @Path("/doesBucketExist")
	@Produces(MediaType.APPLICATION_JSON) 
	public boolean doesBucketExist(@QueryParam("bucketName") String bucketName){
		return bucketManage.doesBucketExist(bucketName);
	}
}